package com.hy.study.nowcoder;

import java.util.Scanner;
import java.util.Stack;

/**
 * 链表反转
 */
public class ReversalLinked {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        LinkedNodeList linkedNodeList = new LinkedNodeList();

        int arr[]= {1,2,3};
        for (int i = 0; i < arr.length; i++) {
            Node node=new Node(arr[i]);
            linkedNodeList.add(node);
        }
        linkedNodeList.revers1();
    }
}

/**
 * 链表
 */
class LinkedNodeList {
    private Node head;

    /**
     * 向链表中添加元素
     */
    public void add(Node node) {
        if (head == null) {
            head = node;
            return;
        }
        Node temp = head;
        while (true) {
            if (temp.getNext() == null) {
                break;
            }
            temp = temp.getNext();
        }
        temp.setNext(node);
    }

    /**
     * 查看链表元素
     */
    public void list(){
        if(head==null){
            System.out.println("链表为空无法遍历");
            return;
        }
        Node temp=head;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.getNext();

        }
    }

    /**
     * 链表反转
     */
    public void  revers1(){
        if(head==null){
            return;
        }
        Stack<Integer> stack=new Stack<>();
        Node temp=head;
        while (true){
            if(temp==null){
                break;
            }
            stack.push(temp.getElement());
            temp=temp.getNext();
        }
        while (stack.size()>0){
            System.out.println(stack.pop());
        }
    }
//
//    //如果链表为空或者 只有一个节点，就无需反转 直接返回
//        if (head.getNextNode() == null || head.getNextNode().getNextNode() == null) {
//        return;
//    }
//    Node temp = head.getNextNode();
//    Node next = null;//指向当前节点的下一个节点
//    Node reverseHead=new Node(0,"","");
//    //遍历原理的链表
//        while (temp!=null){
//        //没遍历一个节点 取出 并放在新的链表中
//        next=temp.getNextNode();//暂时保存当前节点的下一个节点
//        temp.setNextNode(reverseHead.getNextNode());//将temp 的下一个节点指向新的链表的最前端
//        reverseHead.setNextNode(temp);//将temp 链接到新的链表上
//        temp=next;//后移
//    }
//    //将head.next 指向reverseHead.next
//        head.setNextNode(reverseHead.getNextNode());
//

}

class Node {
    private Integer element;
    private Node next;

    public Node(Integer element) {
        this.element = element;
    }

    public Integer getElement() {
        return element;
    }

    public void setElement(Integer element) {
        this.element = element;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Node() {
    }
}